Share via


La classe CScrollView

Avec CView des fonctionnalités de défilement.

Syntaxe

class CScrollView : public CView

Membres

Constructeurs protégés

Nom Description
CScrollView::CScrollView Construit un objet CScrollView.

Méthodes publiques

Nom Description
CScrollView::CheckScrollBars Indique si la vue de défilement comporte des barres de défilement horizontales et verticales.
CScrollView::FillOutsideRect Remplit la zone d’une vue en dehors de la zone de défilement.
CScrollView::GetDeviceScrollPosition Obtient la position de défilement actuelle dans les unités d’appareil.
CScrollView::GetDeviceScrollSizes Obtient le mode de mappage actuel, la taille totale et les tailles de ligne et de page de l’affichage à défilement. Les tailles sont en unités d’appareil.
CScrollView::GetScrollPosition Obtient la position de défilement actuelle en unités logiques.
CScrollView::GetTotalSize Obtient la taille totale de la vue de défilement en unités logiques.
CScrollView::ResizeParentToFit Provoque la taille de la vue pour dicter la taille de son cadre.
CScrollView::ScrollToPosition Fait défiler l’affichage vers un point donné, spécifié dans les unités logiques.
CScrollView::SetScaleToFitSize Place la vue de défilement en mode scale-to-fit.
CScrollView::SetScrollSizes Définit le mode de mappage de l’affichage de défilement, la taille totale et les quantités de défilement horizontales et verticales.

Notes

Vous pouvez gérer le défilement standard dans n’importe quelle classe dérivée en CView remplaçant les fonctions mappées OnHScroll et OnVScroll membres du message. Mais CScrollView ajoute les fonctionnalités suivantes à ses CView fonctionnalités :

  • Il gère les tailles de fenêtre et de fenêtre et de fenêtre et les modes de mappage.

  • Il défile automatiquement en réponse aux messages de barre de défilement.

  • Il fait défiler automatiquement la réponse aux messages du clavier, d’une souris qui ne fait pas défiler ou de la roue IntelliMouse.

Pour faire défiler automatiquement la réponse aux messages à partir du clavier, ajoutez un WM_KEYDOWN message, puis testez VK_DOWN, VK_PREV et appelez SetScrollPos.

Vous pouvez gérer le défilement de la roulette de la souris vous-même en remplaçant les fonctions mappées OnMouseWheel et OnRegisteredMouseWheel membres des messages. Comme c’est le cas, CScrollViewces fonctions membres prennent en charge le comportement recommandé pour WM_MOUSEWHEEL, le message de rotation de roue.

Pour tirer parti du défilement automatique, dérivez votre classe d’affichage à partir CScrollViewCViewde . Lorsque la vue est créée pour la première fois, si vous souhaitez calculer la taille de l’affichage à défilement en fonction de la taille du document, appelez la SetScrollSizes fonction membre à partir de votre remplacement de l’un ou CView::OnUpdatel’autre CView::OnInitialUpdate des deux. (Vous devez écrire votre propre code pour interroger la taille du document. Pour obtenir un exemple, consultez l’exemple Scribble.)

L’appel à la SetScrollSizes fonction membre définit le mode de mappage de la vue, les dimensions totales de la vue de défilement et les quantités à faire défiler horizontalement et verticalement. Toutes les tailles sont en unités logiques. La taille logique de la vue est généralement calculée à partir des données stockées dans le document, mais dans certains cas, vous pouvez spécifier une taille fixe. Pour obtenir des exemples des deux approches, consultez CScrollView::SetScrollSizes.

Vous spécifiez les quantités à faire défiler horizontalement et verticalement dans les unités logiques. Par défaut, si l’utilisateur clique sur un arbre de barre de défilement en dehors de la zone de défilement, CScrollView fait défiler une « page ». Si l’utilisateur clique sur une flèche de défilement à l’une ou l’autre extrémité d’une barre de défilement, CScrollView fait défiler une « ligne ». Par défaut, une page est de 1/10 de la taille totale de la vue ; une ligne est de 1/10 de la taille de la page. Remplacez ces valeurs par défaut en passant des tailles personnalisées dans la SetScrollSizes fonction membre. Par exemple, vous pouvez définir la taille horizontale sur une fraction de la largeur de la taille totale et la taille verticale sur la hauteur d’une ligne dans la police actuelle.

Au lieu de faire défiler, CScrollView vous pouvez mettre automatiquement à l’échelle la vue vers la taille actuelle de la fenêtre. Dans ce mode, la vue n’a pas de barres de défilement et la vue logique est étirée ou réduite pour s’adapter exactement à la zone cliente de la fenêtre. Pour utiliser cette fonctionnalité d’ajustement à l’échelle, appelez CScrollView::SetScaleToFitSize. (Appelez ou SetScaleToFitSizeSetScrollSizes, mais pas les deux.)

Avant que la OnDraw fonction membre de votre classe de vue dérivée soit appelée, CScrollView ajuste automatiquement l’origine de la fenêtre d’affichage pour l’objet CPaintDC de contexte d’appareil auquel elle passe OnDraw.

Pour ajuster l’origine de la fenêtre de défilement à l’origine de la fenêtre de défilement, CScrollView remplace CView::OnPrepareDC. Cet ajustement est automatique pour le contexte de l’appareil CPaintDC qui CScrollView passe, OnDrawmais vous devez vous appeler CScrollView::OnPrepareDC pour tous les autres contextes d’appareil que vous utilisez, tels qu’un CClientDC. Vous pouvez remplacer CScrollView::OnPrepareDC pour définir le stylet, la couleur d’arrière-plan et d’autres attributs de dessin, mais appeler la classe de base pour effectuer une mise à l’échelle.

Les barres de défilement peuvent apparaître à trois endroits par rapport à une vue, comme indiqué dans les cas suivants :

  • Les barres de défilement de style fenêtre standard peuvent être définies pour l’affichage à l’aide des WS_HSCROLL styles Windows et WS_VSCROLLdes styles Windows.

  • Les contrôles de barre de défilement peuvent également être ajoutés au cadre contenant l’affichage, auquel cas l’infrastructure transfère et WM_VSCROLL transmet les WM_HSCROLL messages de la fenêtre frame à l’affichage actif.

  • L’infrastructure transfère également les messages de défilement d’un CSplitterWnd contrôle de fractionnement vers le volet de fractionnement actif (une vue). Lorsqu’il est placé dans une CSplitterWnd barre de défilement partagée, un CScrollView objet utilise les barres de défilement partagées plutôt que de créer ses propres barres.

Pour plus d’informations sur l’utilisation, consultez l’architecture document/vue et les classes de vue dérivées disponibles dans MFC.CScrollView

Hiérarchie d'héritage

CObject

CCmdTarget

CWnd

CView

CScrollView

Spécifications

En-têteafxwin.h:

CScrollView::CheckScrollBars

Appelez cette fonction membre pour déterminer si la vue de défilement comporte des barres horizontales et verticales.

void CheckScrollBars(
    BOOL& bHasHorzBar,
    BOOL& bHasVertBar) const;

Paramètres

bHasHorzBar
Indique que l’application a une barre de défilement horizontale.

bHasVertBar
Indique que l’application a une barre de défilement verticale.

CScrollView::CScrollView

Construit un objet CScrollView.

CScrollView();

Notes

Vous devez appeler soit SetScrollSizes avant SetScaleToFitSize que la vue de défilement soit utilisable.

CScrollView::FillOutsideRect

Appelez FillOutsideRect pour remplir la zone de la vue qui s’affiche en dehors de la zone de défilement.

void FillOutsideRect(
    CDC* pDC,
    CBrush* pBrush);

Paramètres

pDC
Contexte d’appareil dans lequel le remplissage doit être effectué.

pBrush
Pinceau avec lequel la zone doit être remplie.

Notes

Utilisez FillOutsideRect la fonction de gestionnaire de votre vue de OnEraseBkgnd défilement pour empêcher une réinitialisation excessive de l’arrière-plan.

Exemple

BOOL CMyScrollView::OnEraseBkgnd(CDC* pDC)
{
   CBrush br(GetSysColor(COLOR_WINDOW));
   FillOutsideRect(pDC, &br);
   return TRUE;                   // Erased
}

CScrollView::GetDeviceScrollPosition

Appelez GetDeviceScrollPosition lorsque vous avez besoin des positions horizontales et verticales actuelles des zones de défilement dans les barres de défilement.

CPoint GetDeviceScrollPosition() const;

Valeur de retour

Positions horizontales et verticales (en unités d’appareil) des zones de défilement sous forme d’objet CPoint .

Notes

Cette paire de coordonnées correspond à l’emplacement dans le document vers lequel le coin supérieur gauche de la vue a été fait défiler. Cela est utile pour désactiver les positions de l’appareil à la souris pour afficher les positions de l’appareil à défilement.

GetDeviceScrollPosition retourne des valeurs dans les unités d’appareil. Si vous souhaitez des unités logiques, utilisez GetScrollPosition plutôt.

CScrollView::GetDeviceScrollSizes

GetDeviceScrollSizes obtient le mode de mappage actuel, la taille totale et les tailles de ligne et de page de l’affichage défilant.

void GetDeviceScrollSizes(
    int& nMapMode,
    SIZE& sizeTotal,
    SIZE& sizePage,
    SIZE& sizeLine) const;

Paramètres

nMapMode
Retourne le mode de mappage actuel pour cette vue. Pour obtenir la liste des valeurs possibles, consultez SetScrollSizes.

sizeTotal
Retourne la taille totale actuelle de la vue de défilement dans les unités d’appareil.

sizePage
Retourne les quantités horizontales et verticales actuelles à faire défiler dans chaque direction en réponse à un clic de souris dans un arbre de barre de défilement. Le cx membre contient la quantité horizontale. Le cy membre contient la quantité verticale.

sizeLine
Retourne les quantités horizontales et verticales actuelles à faire défiler dans chaque direction en réponse à un clic de souris dans une flèche de défilement. Le cx membre contient la quantité horizontale. Le cy membre contient la quantité verticale.

Notes

Les tailles sont en unités d’appareil. Cette fonction membre est rarement appelée.

CScrollView::GetScrollPosition

Appelez GetScrollPosition lorsque vous avez besoin des positions horizontales et verticales actuelles des zones de défilement dans les barres de défilement.

CPoint GetScrollPosition() const;

Valeur de retour

Positions horizontales et verticales (en unités logiques) des zones de défilement sous forme d’objet CPoint .

Notes

Cette paire de coordonnées correspond à l’emplacement dans le document vers lequel le coin supérieur gauche de la vue a été fait défiler.

GetScrollPosition retourne des valeurs en unités logiques. Si vous souhaitez des unités d’appareil, utilisez GetDeviceScrollPosition plutôt.

CScrollView::GetTotalSize

Appelez GetTotalSize pour récupérer les tailles horizontales et verticales actuelles de l’affichage de défilement.

CSize GetTotalSize() const;

Valeur de retour

Taille totale de la vue de défilement en unités logiques. La taille horizontale se trouve dans le cx membre de la CSize valeur de retour. La taille verticale se trouve dans le cy membre.

CScrollView::ResizeParentToFit

Appelez ResizeParentToFit pour laisser la taille de votre vue dicter la taille de sa fenêtre frame.

void ResizeParentToFit(BOOL bShrinkOnly = TRUE);

Paramètres

bShrinkOnly
Type de redimensionnement à effectuer. La valeur par défaut, réduit TRUEla fenêtre frame si nécessaire. Les barres de défilement apparaissent toujours pour les grandes vues ou les petites fenêtres frame. Une valeur des causes de FALSE la vue est toujours de redimensionner la fenêtre de cadre exactement. Cela peut être un peu dangereux, car la fenêtre de cadre peut être trop grande pour s’adapter à l’intérieur de la fenêtre de cadre MDI (Multiple Document Interface) ou de l’écran.

Notes

Il est recommandé uniquement pour les vues dans les fenêtres d’images enfants MDI. Utilisez ResizeParentToFit la OnInitialUpdate fonction de gestionnaire de votre classe dérivée CScrollView . Pour obtenir un exemple de cette fonction membre, consultez CScrollView::SetScrollSizes.

ResizeParentToFit suppose que la taille de la fenêtre d’affichage a été définie. Si la taille de la fenêtre d’affichage n’a pas été définie quand ResizeParentToFit elle est appelée, vous obtiendrez une assertion. Pour vous assurer que cela ne se produit pas, effectuez l’appel suivant avant d’appeler ResizeParentToFit:

GetParentFrame()->RecalcLayout();

CScrollView::ScrollToPosition

Appelez ScrollToPosition pour faire défiler jusqu’à un point donné dans la vue.

void ScrollToPosition(POINT pt);

Paramètres

pt
Point à faire défiler vers, en unités logiques. Le x membre doit être une valeur positive (supérieure ou égale à 0, jusqu’à la taille totale de la vue). Il en va de même pour le y membre lorsque le mode de mappage est MM_TEXT. Le y membre est négatif dans les modes de mappage autres que MM_TEXT.

Notes

L’affichage est fait défiler pour que ce point se trouve en haut à gauche de la fenêtre. Cette fonction membre ne doit pas être appelée si la vue est mise à l’échelle pour s’adapter.

CScrollView::SetScaleToFitSize

Appelez SetScaleToFitSize lorsque vous souhaitez mettre automatiquement à l’échelle la taille de la fenêtre actuelle pour mettre à l’échelle la taille de la fenêtre actuelle.

void SetScaleToFitSize(SIZE sizeTotal);

Paramètres

sizeTotal
Tailles horizontales et verticales auxquelles la vue doit être mise à l’échelle. La taille de la vue de défilement est mesurée en unités logiques. La taille horizontale est contenue dans le cx membre. La taille verticale est contenue dans le cy membre. Les deux cx et cy doivent être supérieures ou égales à 0.

Notes

Avec les barres de défilement, seule une partie de la vue logique peut être visible à tout moment. Toutefois, avec la fonctionnalité d’ajustement à l’échelle, la vue n’a pas de barres de défilement et la vue logique est étirée ou réduite pour s’adapter exactement à la zone cliente de la fenêtre. Lorsque la fenêtre est redimensionnée, la vue dessine ses données à une nouvelle échelle en fonction de la taille de la fenêtre.

Vous placez généralement l’appel dans SetScaleToFitSize votre remplacement de la fonction membre de OnInitialUpdate la vue. Si vous ne souhaitez pas mettre à l’échelle automatiquement, appelez plutôt la SetScrollSizes fonction membre.

SetScaleToFitSize peut être utilisé pour implémenter une opération « Zoom avant ajustement ». Permet SetScrollSizes de réinitialiser le défilement.

SetScaleToFitSize suppose que la taille de la fenêtre d’affichage a été définie. Si la taille de la fenêtre d’affichage n’a pas été définie quand SetScaleToFitSize elle est appelée, vous obtiendrez une assertion. Pour vous assurer que cela ne se produit pas, effectuez l’appel suivant avant d’appeler SetScaleToFitSize:

GetParentFrame()->RecalcLayout();

CScrollView::SetScrollSizes

Appelez SetScrollSizes quand la vue est sur le point d’être mise à jour.

void SetScrollSizes(
    int nMapMode,
    SIZE sizeTotal,
    const SIZE& sizePage = sizeDefault,
    const SIZE& sizeLine = sizeDefault);

Paramètres

nMapMode
Mode de mappage à définir pour cette vue. Valeurs possibles :

Mode de mappage Unité logique L’axe y positif s’étend...
MM_TEXT 1 pixel Inférieur
MM_HIMETRIC 0,01 mm Hausse
MM_TWIPS 1/1440 dans Hausse
MM_HIENGLISH 0.001 dans Hausse
MM_LOMETRIC 0,1 mm Hausse
MM_LOENGLISH 0.01 dans Hausse

Tous ces modes sont définis par Windows. Deux modes de mappage standard et MM_ISOTROPICMM_ANISOTROPIC, ne sont pas utilisés pour CScrollView. La bibliothèque de classes fournit la fonction membre pour mettre à l’échelle SetScaleToFitSize la vue en taille de fenêtre. La colonne 3 du tableau ci-dessus décrit l’orientation des coordonnées.

sizeTotal
Taille totale de l’affichage de défilement. Le cx membre contient l’étendue horizontale. Le cy membre contient l’étendue verticale. Les tailles sont en unités logiques. Les deux cx et cy doivent être supérieures ou égales à 0.

sizePage
La quantité horizontale et verticale à faire défiler dans chaque direction en réponse à un clic de souris dans un arbre de barre de défilement. Le cx membre contient la quantité horizontale. Le cy membre contient la quantité verticale.

sizeLine
La valeur horizontale et verticale doit faire défiler chaque direction en réponse à un clic de souris dans une flèche de défilement. Le cx membre contient la quantité horizontale. Le cy membre contient la quantité verticale.

Notes

Appelez-le dans votre remplacement de la OnUpdate fonction membre pour ajuster les caractéristiques de défilement lorsque, par exemple, le document est initialement affiché ou lorsqu’il change de taille.

Vous obtiendrez généralement des informations de taille à partir du document associé de la vue en appelant une fonction membre de document, peut-être appelée GetMyDocSize, que vous fournissez avec votre classe de document dérivée. Le code suivant montre cette approche :

CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
SetScrollSizes(nMapMode, pMyDoc->GetMyDocSize());

Vous devrez peut-être parfois définir une taille fixe, comme dans le code suivant :

SetScrollSizes(nMapMode, CSize(100, 100));

Vous devez définir le mode de mappage sur l’un des modes de mappage Windows à l’exception MM_ISOTROPIC ou MM_ANISOTROPIC. Si vous souhaitez utiliser un mode de mappage non contraint, appelez la SetScaleToFitSize fonction membre au lieu de SetScrollSizes.

Exemple

void CMyScrollView::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/,
   CObject* /*pHint*/)
{
   // Implement a GetMyDocSize() member function in 
   // your document class; it returns a CSize.
   CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
   SetScrollSizes(MM_LOENGLISH, pMyDoc->GetMyDocSize());
   ResizeParentToFit();   // Default bShrinkOnly argument
}

 

void CMyScrollView::OnInitialUpdate()
{
   CScrollView::OnInitialUpdate();

   // The GetMyDocSize() member function is implemented in 
   // your document class. The return type is CSize.
   CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
   SetScrollSizes(MM_TEXT, pMyDoc->GetMyDocSize());
}

Voir aussi

Exemple MFC DIBLOOK
CView Classe
Graphique hiérarchique
CSplitterWnd Classe